package appController

import (
	"CMETO/models"
	"net/http"

	"github.com/gin-gonic/gin"
)

// app部分的接口
type UserController struct{}

// @Summary 更新用户
// @Description 传入json，更新用户
// @Tags APP管理
// @Accept json
// @Produce json
// @Param userInfo body models.User true "用户信息"
// @Success 200 {object} models.UpdateResult[models.User] "更新成功"
// @fail 400 {object} models.ErrorResult "数据错误"
// @fail 401 {object} models.ErrorResult "用户不存在"
// @fail 402 {object} models.AddResult "更新失败"
// @Router /app/user [put]
// @Security JWT
func (u UserController) UpdateUser(ctx *gin.Context) {
	// 获取提交的用户修改信息
	var user models.User
	// 绑定json数据
	if err := ctx.ShouldBindJSON(&user); err != nil {
		ctx.JSON(http.StatusOK, &models.ErrorResult{
			Msg:    "数据绑定失败",
			Code:   "400",
			Result: err,
		})
		return
	}
	// 绑定用户信息
	user_old := &models.User{}
	// 查找用户信息
	models.DB.First(&user_old, user.Id)
	if user_old.Id == 0 {
		ctx.JSON(http.StatusOK, &models.ErrorResult{
			Msg:    "用户不存在",
			Code:   "400",
			Result: nil,
		})
		return
	}

	result := models.DB.Model(&user_old).Updates(&user).Error
	if result != nil {
		ctx.JSON(http.StatusOK, &models.ErrorResult{
			Msg:    "更新失败",
			Code:   "400",
			Result: nil,
		})
	} else {
		ctx.JSON(http.StatusOK, &models.UpdateResult[models.User]{
			Msg:    "更新成功",
			Code:   "200",
			Result: user,
		})
	}
}

// @Summary 用户查询
// @Description 根据Id查询用户
// @Tags 用户管理
// @Accept json
// @Produce json
// @Param id path string true "用户id"
// @Success 200 {object} models.ResultCommon[models.User] "查询成功"
// @Success 401 {object} models.ResultCommon[string] "查询失败"
// @Router /app/user/{id} [get]
// @Security JWT
func (u UserController) QueryUserById(ctx *gin.Context) {
	user := &models.User{}
	user_id := ctx.Param("id")
	models.DB.Where("id=?", user_id).First(&user)
	if user.Id == 0 {
		ctx.JSON(http.StatusOK, &models.ResultCommon[string]{
			Msg:    "查询失败",
			Code:   "400",
			Result: "",
		})
	} else {
		ctx.JSON(http.StatusOK, &models.ResultCommon[models.User]{
			Msg:    "查询成功",
			Code:   "200",
			Result: *user,
		})
	}
}
